/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author hellen
 */
@Entity
@Table(name = "PRODUCTO")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Producto.findAll", query = "SELECT p FROM Producto p"),
    @NamedQuery(name = "Producto.findByProductoID", query = "SELECT p FROM Producto p WHERE p.productoID = :productoID"),
    @NamedQuery(name = "Producto.findByProdNombre", query = "SELECT p FROM Producto p WHERE p.prodNombre = :prodNombre"),
    @NamedQuery(name = "Producto.findByProdCantidad", query = "SELECT p FROM Producto p WHERE p.prodCantidad = :prodCantidad"),
    @NamedQuery(name = "Producto.findByProdTipo", query = "SELECT p FROM Producto p WHERE p.prodTipo = :prodTipo"),
    @NamedQuery(name = "Producto.findByProdDescripcion", query = "SELECT p FROM Producto p WHERE p.prodDescripcion = :prodDescripcion"),
    @NamedQuery(name = "Producto.findByProdCategoriaProdID", query = "SELECT p FROM Producto p WHERE p.prodCategoriaProdID = :prodCategoriaProdID")})
public class Producto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "ProductoID")
    private Integer productoID;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 15)
    @Column(name = "Prod_Nombre")
    private String prodNombre;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 5)
    @Column(name = "Prod_Cantidad")
    private String prodCantidad;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "Prod_Tipo")
    private String prodTipo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Prod_Descripcion")
    private String prodDescripcion;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Prod_CategoriaProdID")
    private String prodCategoriaProdID;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "regPedProductoID")
    private List<RegistroPedido> registroPedidoList;
    @JoinColumn(name = "Prod_DetalleProdEntradaID", referencedColumnName = "DetalleProdEntradaID")
    @ManyToOne(optional = false)
    private DetalleProductoEntrada prodDetalleProdEntradaID;
    @JoinColumn(name = "Prod_DetalleProdEntradaID", referencedColumnName = "CategoriaProdID")
    @ManyToOne(optional = false)
    private CategoriaProd prodDetalleProdEntradaID1;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ordCProductoID")
    private List<OrdenCompra> ordenCompraList;

    public Producto() {
    }

    public Producto(Integer productoID) {
        this.productoID = productoID;
    }

    public Producto(Integer productoID, String prodNombre, String prodCantidad, String prodTipo, String prodDescripcion, String prodCategoriaProdID) {
        this.productoID = productoID;
        this.prodNombre = prodNombre;
        this.prodCantidad = prodCantidad;
        this.prodTipo = prodTipo;
        this.prodDescripcion = prodDescripcion;
        this.prodCategoriaProdID = prodCategoriaProdID;
    }

    public Integer getProductoID() {
        return productoID;
    }

    public void setProductoID(Integer productoID) {
        this.productoID = productoID;
    }

    public String getProdNombre() {
        return prodNombre;
    }

    public void setProdNombre(String prodNombre) {
        this.prodNombre = prodNombre;
    }

    public String getProdCantidad() {
        return prodCantidad;
    }

    public void setProdCantidad(String prodCantidad) {
        this.prodCantidad = prodCantidad;
    }

    public String getProdTipo() {
        return prodTipo;
    }

    public void setProdTipo(String prodTipo) {
        this.prodTipo = prodTipo;
    }

    public String getProdDescripcion() {
        return prodDescripcion;
    }

    public void setProdDescripcion(String prodDescripcion) {
        this.prodDescripcion = prodDescripcion;
    }

    public String getProdCategoriaProdID() {
        return prodCategoriaProdID;
    }

    public void setProdCategoriaProdID(String prodCategoriaProdID) {
        this.prodCategoriaProdID = prodCategoriaProdID;
    }

    @XmlTransient
    public List<RegistroPedido> getRegistroPedidoList() {
        return registroPedidoList;
    }

    public void setRegistroPedidoList(List<RegistroPedido> registroPedidoList) {
        this.registroPedidoList = registroPedidoList;
    }

    public DetalleProductoEntrada getProdDetalleProdEntradaID() {
        return prodDetalleProdEntradaID;
    }

    public void setProdDetalleProdEntradaID(DetalleProductoEntrada prodDetalleProdEntradaID) {
        this.prodDetalleProdEntradaID = prodDetalleProdEntradaID;
    }

    public CategoriaProd getProdDetalleProdEntradaID1() {
        return prodDetalleProdEntradaID1;
    }

    public void setProdDetalleProdEntradaID1(CategoriaProd prodDetalleProdEntradaID1) {
        this.prodDetalleProdEntradaID1 = prodDetalleProdEntradaID1;
    }

    @XmlTransient
    public List<OrdenCompra> getOrdenCompraList() {
        return ordenCompraList;
    }

    public void setOrdenCompraList(List<OrdenCompra> ordenCompraList) {
        this.ordenCompraList = ordenCompraList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (productoID != null ? productoID.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Producto)) {
            return false;
        }
        Producto other = (Producto) object;
        if ((this.productoID == null && other.productoID != null) || (this.productoID != null && !this.productoID.equals(other.productoID))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "persistencia.Producto[ productoID=" + productoID + " ]";
    }
    
}
